home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1996 #3 / Amiga Plus CD - 1996 - No. 3.iso / demo-versionen / databaseprofessional_v3.0 / arexx / auto / graph.rexx < prev    next >
OS/2 REXX Batch file  |  1995-05-20  |  3KB  |  179 lines

  1. /* Graph-Report, V1.0, Jörg Richter */
  2.  
  3. OPTIONS RESULTS
  4.  
  5. ADDRESS DataBase
  6. DBtoFront
  7.  
  8. GetFileName
  9. IF RC = 5 THEN EXIT
  10. out = result
  11. pos = Lastpos(".",out)
  12. IF pos > 0 THEN
  13.   out = SubStr(out,1,pos-1)
  14. out = out || ".graph"
  15. ok = Open(file,out,R)
  16. IF ok = 0 THEN EXIT
  17. title = ReadLn(file)
  18. axis = ReadLn(file)
  19. fields = 0
  20. weiter = 0
  21. DO WHILE weiter = 0
  22.   str = ReadLn(file)
  23.   weiter = EOF(file)
  24.   IF weiter = 0 THEN DO
  25.     IF Length(str) > 0 THEN DO
  26.       fields = fields + 1
  27.       field.fields = WORD(str,1)
  28.       col.fields = WORD(str,2)
  29.       legende.fields = DELWORD(str,1,2)
  30.     END
  31.   END
  32. END
  33. ok = Close(file)
  34.  
  35. offset = 50
  36.  
  37. GetMaskSize
  38. size = result
  39. width = WORD(size,1)
  40. height = WORD(size,2)
  41. Current
  42. aktuell = result
  43. Total
  44. ges = result
  45.  
  46. Request "_Datensatz|D_atei|_Bereich|_Abbruch" "Welche Daten wollen Sie darstellen ?"
  47. return = RC
  48. IF return = 0 THEN EXIT
  49. IF return = 1 THEN DO
  50.   first = aktuell
  51.   sets = 1
  52. END
  53. IF return = 2 THEN DO
  54.   first = 1
  55.   sets = ges
  56. END
  57. IF return = 3 THEN DO
  58.   RequestText "Erster Datensatz (1-" || ges || ")"
  59.   IF RC = 5 THEN EXIT
  60.   first = result
  61.   RequestText "Letzter Datensatz (" || first || "-" || ges || ")"
  62.   IF RC = 5 THEN EXIT
  63.   IF result < first THEN EXIT
  64.   IF result > ges THEN EXIT
  65.   sets = result-first+1
  66. END
  67.  
  68. ClearMask
  69. Display Off
  70. breite = (width-2*offset)%((fields+1)*sets)
  71.  
  72. /* Größten Wert ermitteln */
  73. Goto first
  74. max = 0
  75. weiter = 1
  76. DO WHILE weiter <= sets
  77.   i = 1
  78.   DO WHILE i <= fields
  79.     GetData $F || field.i
  80.     IF result > max THEN max = result
  81.     i = i + 1
  82.   END
  83.   RightOne
  84.   weiter = weiter + 1
  85. END
  86.  
  87. /* Legende */
  88. i = 1
  89. x = width-200
  90. y = 20
  91. legheight = fields*15+5
  92. Box width-210 15 190 legheight 1003
  93. SetFont helvetica.font 11 0
  94. DO WHILE i <= fields
  95.   BoxFill x y 10 10 col.i
  96.   Box x y 10 10 1002
  97.   Text x+15 y+8 1 LEFT legende.i
  98.   y = y + 15
  99.   i = i + 1
  100. END
  101.  
  102. startx = offset+offset%2+breite%2
  103. starty = height-offset%2
  104.  
  105. /* Skalierung bestimmen */
  106. step = 1
  107. val = max
  108. DO WHILE val ~= 0
  109.   val = val % step * step
  110.   step = step * 10
  111. END
  112. step = step%100
  113. mval = max%step+1
  114. IF mval > 5 THEN
  115.   mval = mval * step
  116. ELSE DO
  117.   mval = mval * step
  118.   step = step%2
  119. END
  120. scale = (height-offset-20-legheight)/mval
  121.  
  122. xpos = startx-(breite%2)
  123. /* Y-Achse */
  124. len = mval*scale%1
  125. Line xpos starty-len 0 len 1
  126. y = -1
  127. val = 0
  128. SetFont helvetica.font 11 0
  129. say RC
  130. DO WHILE y <= len
  131.   Line xpos-5 starty-y 5 0 1
  132.   Text xpos-8 starty-y+3 1 RIGHT val
  133.   val = val + step
  134.   y = y + step*scale%1
  135. END
  136.  
  137. /* X-Achse */
  138. Line xpos starty+1 breite*(fields+1)*sets 0 1
  139.  
  140. /* Title */
  141. SetFont helvetica.font 18 0
  142. Text xpos+5 15+legheight%2 2 LEFT title
  143. Box xpos legheight%2-3 result+10 25 1003
  144. SetFont RESET 0
  145.  
  146. /* Balken malen */
  147. x = startx
  148. y = starty
  149. Goto first
  150. weiter = 1
  151. col = 1
  152. DO WHILE weiter <= sets
  153.   i = 1
  154.   DO WHILE i <= fields
  155.     GetData $F || field.i
  156.     res = result
  157.     IF ~DATATYPE(res,W) THEN res = 0
  158.     val = res*scale%1
  159.     BoxFill x y-val breite-1 val col.i
  160.     Box x y-val breite-1 val 1002
  161.     i = i + 1
  162.     x = x + breite
  163.   END
  164.   IF axis = 0 THEN
  165.     Text startx+(fields*breite)%2+(weiter-1)*((fields+1)*breite) starty+15 1 CENTER (weiter-1)+first
  166.   ELSE DO
  167.     GetData $F || axis
  168.     Text startx+(fields*breite)%2+(weiter-1)*((fields+1)*breite) starty+15 1 CENTER result
  169.   END
  170.   x = x + breite
  171.   RightOne
  172.   weiter = weiter + 1
  173. END
  174. WaitCommand title
  175. Goto aktuell
  176. Display On
  177. Show New
  178.  
  179.